Add community Windows GUI configurator - #76
Open
Rezetyan wants to merge 1 commit into
Open
Conversation
Self-contained WinForms configurator for MouseMaster properties files,
developed in the Rezetyan/mousemaster fork and released there as
configurator v2.1.0. Targets the v89 properties format and preserves
any properties and comments it does not manage.
- Bilingual Simplified Chinese / English UI following the Windows
display language, switchable at runtime.
- Rebinds 37 actions in six categories plus four mouse/wheel motion
values, with exact-chord conflict resolution and reporting.
- Normal-mode entry combos are generated with mutual same-key modifier
exclusion (^{...}) so a modifier-free binding never shadows a
modified one.
- Optional focus mode generates per-mode swallow-all fallback aliases
for the eight keyboard-mouse modes; Alt-Tab centering is toggled
independently.
- Lossless round-trip via comment-based mmcfg metadata, rolling
.gui-backup before every save, and restore of the build-time embedded
neo-mousekeys-ijkl default.
- Builds with the stock .NET Framework csc.exe (no NuGet packages);
PerMonitorV2 DPI-aware layout that rescales across monitors.
- 305-assertion headless self-test (--self-test) plus an end-to-end
focus-mode test that injects keys into a real foreground window
driven by a real mousemaster.exe.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR contributes a community-maintained Windows GUI configurator for MouseMaster
properties files, developed in the Rezetyan/mousemaster
fork and already released there (most recently as
configurator v2.1.0).
Everything lives in a self-contained
configurator/directory: C# WinForms source, thebuild script, an English README (中文说明), an MIT license
for the new code, and two layers of tests. There are no changes to any existing
MouseMaster file beyond a short README section and
.gitignoreentries for the buildartifacts.
What it does
switchable at runtime; the choice is remembered in the registry.
mode switches, hints, automation) plus four motion values (mouse/wheel max velocity
and acceleration). Only the default branch of the dynamic velocity properties is
replaced; modifier branches and initial velocities are preserved.
mode scope clears the old binding and reports the change.
same-key modifier exclusion (
^{...}), so a modifier-free binding can never shadow amodified one (e.g. Screen Hint
Ctrl+Fvs UI HintFgenerate_{leftctrl} +fand^{leftctrl} +finstead of both firing onCtrl+F).keyboard-mouse modes, excluding keys used by each mode's existing non-swallowing
combos, and comments out OS-bound macros while it is on.
verbatim (including anything newer versions add), GUI state round-trips through a
comment-based
mmcfgmetadata block, a rolling.gui-backupis written before everysave, and the build-time embedded
neo-mousekeys-ijkldefault can be restored.Engineering notes
csc.exeviaconfigurator/build.ps1; no NuGet packages, no project files, no build system.configuration/neo-mousekeys-ijkl.propertiesis embedded as the restore-defaultresource.
96 DPI and scaled to the current monitor, with
WM_DPICHANGEDrelayout.MouseMasterConfigurator.exe --self-testruns305 assertions headlessly (catalog coverage, chord parsing, conflict behavior,
metadata round-trip, focus aliases, atomic restore, and a bilingual layout/text-fit
pass over every fixed-size label).
configurator/tests/FocusModeIntegrationTest.csdrives a real
mousemaster.exewith injected keyboard events against a realforeground window (six checks: pass-through in idle, mode entry, pass-through exit,
input swallowing, shortcut swallowing, clean restore).
Verification
configurator/build.ps1compiles cleanly and--self-testreportsPASS: 305 assertionsagainst this branch (i.e. with the currentconfiguration/neo-mousekeys-ijkl.propertiesfrommain, which has evolved sincev89 — the configurator's preserving parser handles the newer properties fine).
OK+PASS)was run against the real upstream v89
mousemaster.exe, whose SHA-256 is verifiedagainst the upstream release in CI.
Out of scope (can follow if wanted)
The fork also has tag-triggered release automation
(
.github/workflows/configurator-release.yml) that builds the configurator, runs theself-test, verifies the upstream
mousemaster.exeSHA-256, and publishes a bundle(configurator + mousemaster + sample configs +
SHA256SUMS.txt). It is intentionallynot part of this PR since release policy is the maintainer's call; happy to
contribute it separately if you are interested.
🤖 Generated with Claude Code